//
//  HRUserAccountInfos.swift
//  weiBo
//
//  Created by helong on 16/7/12.
//  Copyright © 2016年 helong. All rights reserved.
//

import UIKit

class HRUserAccountInfos: NSObject {

    static let sharedUserAccount: HRUserAccountInfos = HRUserAccountInfos()
    //  从沙河中加载用户的信息
    var accountInfo:HRAccessToken? {
        return HRAccessToken.readUserInfo()
    }
    //  登录状态判断,如果能取到说明已经登录
    var isLogin: Bool {
//        if access_token == nil{
//            return false
//        }else{
//            return true
//        }
        //如果已经登录并且没有过期那么才是登录成功
        return access_token != nil
    }
    
     // MARK: - 构造函数私有化,因为是单例,不想让外界用
    private override init() {
        super.init()
    }
     // MARK: - 判断授权码是否过期
    var access_token: String? {
        
        guard let access_token = accountInfo?.access_token else{
            return nil//如果授权码为空
        }
        //授权码不为空
        let result = accountInfo?.expiresTime?.compare(NSDate())
        if result == NSComparisonResult.OrderedDescending{
            //没有过期
            return access_token
        }else{
            //已经过期
            return nil
        }
        
    }
    // MARK: - 网络请求获取access_token
    /**
    根据授权码获取access_token,然后转化成模型
    
    - parameter code: 授权码
    */
    func requestAccessToken(code: String, callBack:(success: Bool) -> ()){
        
        HRNetworkingTool.sharedSessionManager.requestAccessToken(code) { (response, error) -> () in
            
            guard let dict = response as? [String: AnyObject] else{
                // 如果请求失败,将结果通知给控制器
                callBack(success: false)
                return
            }
            //字典转模型
            let accountInfo = HRAccessToken(dict: dict)
            
            self.requestUserInfos(accountInfo, callBack: callBack)
        }
    }
    // MARK: - 请求用户信息
    private func requestUserInfos(accountInfo: HRAccessToken, callBack:(success: Bool) -> ()){
        
        HRNetworkingTool.sharedSessionManager.requestUserInfo(accountInfo) { (response, error) -> Void in
            
            guard let dict = response as? [String: AnyObject] else{
                // 如果请求失败,将结果通知给控制器
                callBack(success: false)
                return
            }
            //转化成模型信息
            accountInfo.name = dict["name"] as? String
            accountInfo.avatar_large = dict["avatar_large"] as? String
            //将用户信息存档
           let result = accountInfo.saveUserInfo()
            //  请求成功将结果通知控制器
            callBack(success: result)
            
        }
    }
    

}
